package com.sicheng.蓝桥.国赛准备.第十一届蓝桥杯JAVAB;

import java.util.Arrays;

/**
 * @author zsc
 * @version 1.0
 * @date 2022/6/8 16:38
 */
public class B扩散 {
    /**
     * B 扩散
     * 本题总分：5 分
     * <p>
     * 问题描述
     * <p>
     * 小蓝在一张无限大的特殊画布上作画。
     * 这张画布可以看成一个方格图，每个格子可以用一个二维的整数坐标表示。
     * 小蓝在画布上首先点了一下几个点：(0 ,0)，(2020 , 11 )，(11 , 14 )，(2000 , 2000 )。只有这几个格子上有黑色，其它位置都是白色的。
     * 每过一分钟，黑色就会扩散一点。具体的，如果一个格子里面是黑色，它就会扩散到上、下、左、右四个相邻的格子中，使得这四个格子也变成黑色（如果原来就是黑色，则还是黑色）。
     * 请问，经过 2020分钟后，画布上有多少个格子是黑色的。
     * <p>
     * 答案提交
     * <p>
     * 这是一道结果填空的题，你只需要算出结果后提交即可。本题的结果为一个整数，在提交答案时只填写这个整数，填写多余的内容将无法得分。
     */

    static int n = 8000;
    static int d = 2020;
    static boolean[][] map = new boolean[n][n];
    // 扩散有正反两个方向，避免负数。把所有点挪动d个单位
    static int[][] points = {
            {d, d},
            {2020 + d, 11 + d},
            {11 + d, 14 + d},
            {2000 + d, 2000 + d}

    };

    public static void main(String[] args) {

        int count = 0;
        for (int[] point : points) {
            spread(point[0], point[1]);
        }

        for (boolean[] m : map) {
            for (boolean ok : m) {
                if (ok)
                    count++;
            }
        }

        System.out.println(count);
    }

    //模拟 以中心点(x,y)开始扩散
    //扩散完的形状是 (x+2020,y),(x-2020,y),(x,y+2020),(xy-2020)组成的正方形
    //把正方形覆盖到的这些点置为true
    static void spread(int x, int y) {
        map[x][y] = true;
        int dd = 2020;
        for (int i = 0; i <= dd; i++) {
            Arrays.fill(map[x + i], y - dd + i, y + dd - i + 1, true);
            Arrays.fill(map[x - i], y - dd + i, y + dd - i + 1, true);
        }


    }


}
